package fr.univ.colloque.servlet;

import fr.univ.colloque.dao.ExposeDao;
import fr.univ.colloque.data.Expose;
import fr.univ.colloque.data.Notation;
import fr.univ.colloque.data.Personne;
import fr.univ.colloque.util.Link;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class NoterExpose extends HttpServlet
{
    // Message d'erreur

    private static String ERR_IMPORTANCE_ABS = "La note \"importance\" est obligatoire";
    private static String ERR_LISIBILITE_ABS = "La note \"lisibilité\" est obligatoire";
    private static String ERR_PERTINENCE_ABS = "La note \"pertinence\" est obligatoire";
    private static String ERR_DECISION_ABS = "La note \"décision\" est obligatoire";

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        HttpSession session = req.getSession();

        Link lien = Link.FORM_NOTER_EXPOSE;

        Personne connecte = (Personne) session.getAttribute("user");

        if (connecte == null || !lien.getType().equals(connecte.getType()))
        {
            // La personne connecté n'a pas les droits nécessaires pour accéder à cette page
            resp.sendRedirect("indexCo.jsp?e=1");
        }
        else
        {
            String idE = req.getParameter("id");

            int idExpo = Integer.parseInt(idE);

            ExposeDao eDao = new ExposeDao();
            Expose e = eDao.get(idExpo, true, false);

            Notation n = eDao.getNote(idExpo, connecte.getId());

            session.setAttribute("expose", e);
            req.setAttribute("note", n);

            // Page qu'il va mettre dans la partie à droite du menu
            // ici fColloqueCandidature.jsp
            req.setAttribute("page", lien);
            req.getRequestDispatcher("indexCo.jsp").forward(req, resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        HttpSession session = req.getSession();

        String action = req.getParameter("action");

        if (action != null && "Annuler".equals(action))
        {
            Link lien = Link.LISTE_EXPOSE_A_NOTER;

            session.removeAttribute("expose");

            resp.sendRedirect(lien.getLien());
        }
        else
        {
            int nImp = Integer.parseInt(req.getParameter("importance"));
            int nPert = Integer.parseInt(req.getParameter("pertinence"));
            int nLis = Integer.parseInt(req.getParameter("lisibilite"));
            int nDec = Integer.parseInt(req.getParameter("decision"));

            Notation n = new Notation(0, 0, 0, 0);

            boolean erreur = false;
            List<String> listErr = new ArrayList<String>();

            if (nImp == 0)
            {
                erreur = true;
                listErr.add(ERR_IMPORTANCE_ABS);
            }
            else
            {
                n.setImportance(nImp);
            }

            if (nPert == 0)
            {
                erreur = true;
                listErr.add(ERR_PERTINENCE_ABS);
            }
            else
            {
                n.setPertinence(nPert);
            }

            if (nDec == 0)
            {
                erreur = true;
                listErr.add(ERR_DECISION_ABS);
            }
            else
            {
                n.setDecision(nDec);
            }

            if (nLis == 0)
            {
                erreur = true;
                listErr.add(ERR_LISIBILITE_ABS);
            }
            else
            {
                n.setLisibilite(nLis);
            }

            if (erreur)
            {
                req.setAttribute("err", listErr);
                Link lien = Link.FORM_NOTER_EXPOSE;

                req.setAttribute("note", n);
                req.setAttribute("page", lien);
                req.getRequestDispatcher("indexCo.jsp").forward(req, resp);
            }
            else
            {
                Expose e = (Expose) session.getAttribute("expose");
                Personne p = (Personne) session.getAttribute("user");

                ExposeDao eDao = new ExposeDao();
                eDao.enregistrerNote(e.getId(), p.getId(), nImp, nPert, nLis, nDec);

                Link lien = Link.LISTE_EXPOSE_A_NOTER;

                session.removeAttribute("expose");

                resp.sendRedirect(lien.getLien());
            }
        }
    }
}
